/* // function是一个对象
// Function是一个构造函数
// 函数上有prototype对象
// 要运行的函数内部的this
Function.prototype.call2=function (context=window){
    context.fn=this;
    // context  要服务的对象
    // 怎么获得函数？ this指向该函数
    console.log('正在手写call2');
    // Array.from()
    // 函数执行时需要的参数
    let args=[...arguments].slice(1)   // 解决伪数组问题
    let result = context.fn(...args);
    return result;
}
// 函数既是函数，又是对象
let foo={value:1}
function bar(name,age){
    console.log(name);
    console.log(age);
    console.log(this.value);
}
let name='sjfk',
age=18;
bar.call2(foo,name,age); */

let foo ={  // 老板
    value:1
}

Function.prototype.call2=function(context=window){
    // 老板和员工之间的联系，在原型链上添加这个方法
    context.fn=this; //动态加属性
    const args=[...arguments].slice(1)
    let result=context.fn(...args);
    delete context.fn;
    return result;

}

function bar(name,age){ // 打工者
    console.log(name,age);
    // this 指向全局？js语言的bug  作为对象的方法被调用时 指向对象
    // bar  -foo 方法调用时
    console.log(this.value);  // 由函数的调用方式决定
}

bar.call2(foo,'利落',18);